#Использовать fs
#Использовать logos
#Использовать v8runner
#Использовать v8find

Перем Лог Экспорт;

Перем ИсходныйПуть Экспорт;
Перем ИмяРасширения Экспорт;
Перем ИмяФайлаКонфигурации Экспорт;
Перем КаталогВременныхФайлов Экспорт;
Перем ВерсияПлатформы Экспорт;
Перем ИмяКаталогаПлатформы Экспорт;


Перем СборщикБинарников;
Перем ИмяВременнойБазы;
Перем КаталогИсходныхФайлов;

Процедура ВыполнитьПреобразованиеИзИсходныхФайловРасширения() Экспорт
	
	Инициализировать();
	
	СкопироватьИсходныеФайлы();
	
	ОтредактироватьИЗагрузитьИсходныеФайлы();
	
	ВыгрузитьФайлКонфигурации();
	
КонецПроцедуры

Процедура СкопироватьИсходныеФайлы()
	
	ФС.КопироватьСодержимоеКаталога(ИсходныйПуть, КаталогИсходныхФайлов);
	
КонецПроцедуры


Процедура Инициализировать()
	
	ФайлРасширения = Новый Файл(ИсходныйПуть);
	
	Если Не ФайлРасширения.Существует() Тогда
		ТекстОшибки = СтрШаблон("Файл не существует по пути %1", ИсходныйПуть);
		Лог.Ошибка(ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(КаталогВременныхФайлов) Тогда
		КаталогВременныхФайлов = ПолучитьИмяВременногоФайла("tmp");		
		ФС.ОбеспечитьКаталог(КаталогВременныхФайлов);		 
		Лог.Информация(СтрШаблон("Подготовлен каталог %1", КаталогВременныхФайлов))
	КонецЕсли;
	
	ФС.ОбеспечитьКаталог(КаталогВременныхФайлов);		 
	
	Если Не ФС.КаталогПустой(КаталогВременныхФайлов) Тогда
		ТекстОшибки = СтрШаблон("Каталог временных файлов должен быть пуст: %1", КаталогВременныхФайлов);
		Лог.Ошибка(ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;
	
	ИмяВременнойБазы = ОбъединитьПути(КаталогВременныхФайлов, "database");
	ФС.ОбеспечитьКаталог(ИмяВременнойБазы);		 
	
	КаталогИсходныхФайлов = ОбъединитьПути(КаталогВременныхФайлов, "src");
	ФС.ОбеспечитьКаталог(КаталогИсходныхФайлов);		 
	
	СисИнфо = Новый СистемнаяИнформация;
	ЭтоWindows = Найти(НРег(СисИнфо.ВерсияОС), "windows") > 0;
	
	Если ЗначениеЗаполнено(ИмяКаталогаПлатформы) Тогда
		СборщикБинарников.УстановитьПутьКПлатформе1С(ИмяКаталогаПлатформы);
		// Если ЭтоWindows Тогда
		// 	Конфигуратор.ПутьКПлатформе1С(ОбъединитьПути(ИмяКаталогаПлатформы,"1cv8.exe"));
		// Иначе
		// 	Конфигуратор.ПутьКПлатформе1С(ОбъединитьПути(ИмяКаталогаПлатформы,"1cv8"));
		// КонецЕсли;
	ИначеЕсли ЗначениеЗаполнено(ВерсияПлатформы) Тогда
		ПоискПлатформы = Новый МенеджерПлатформы1С();	
		
		Это64ОС = СисИнфо.Это64БитнаяОперационнаяСистема;
		Лог.Информация(СисИнфо.ВерсияОС);
		Если Не ЭтоWindows Тогда
			ПоискПлатформы.ДобавитьКаталоГПоиска(ОбъединитьПути("/opt","1C"), РазрядностьПлатформы.x86); 
			Если Это64ОС Тогда
				ПоискПлатформы.ДобавитьКаталоГПоиска(ОбъединитьПути("/opt","1C"), РазрядностьПлатформы.x64); 
			КонецЕсли;
		КонецЕсли;
		
		ПутьКПлатформе = ПоискПлатформы.ПутьКПредприятию(ВерсияПлатформы, РазрядностьПлатформы.x64);
		
		Если ЗначениеЗаполнено(ПутьКПлатформе) Тогда
			ФайлПутя = Новый Файл(ПутьКПлатформе);
			
			СборщикБинарников.ПутьКПлатформе1С(ФайлПутя.Каталог);
		Иначе
			Лог.Ошибка(СтрШаблон("Не найдена платформа указанной версии %1. Будет использована платформа по-умолчанию", ВерсияПлатформы));
		КонецЕсли;
	КонецЕсли;
	
	Лог.Информация(СтрШаблон("Создаю временную базу %1", ИмяВременнойБазы));
	СборщикБинарников.УстановитьИмяКаталогаВременнойБазы(ИмяВременнойБазы);
	СборщикБинарников.СоздатьФайловуюБазу();
	
КонецПроцедуры

Процедура ОтредактироватьИЗагрузитьИсходныеФайлы()
	
	Лог.Информация(СтрШаблон("Редактирую файлы"));
	
	ОбработкаФайловРасширенияДляКонвертацииВКонфигурацию.ВыполнитьОбработкуИсходныхФайловРасширения(КаталогИсходныхФайлов);
	
	Лог.Информация(СтрШаблон("Загружаю исходные файлы в базу"));
	
	СборщикБинарников.ЗагрузитьКонфигурациюИзФайлов(КаталогИсходныхФайлов);
КонецПроцедуры

Процедура ВыгрузитьФайлКонфигурации()
	
	Лог.Информация(СтрШаблон("Сохраняю конфигурацию %1", ИмяФайлаКонфигурации));
	
	СборщикБинарников.ВыгрузитьКонфигурациюВФайл(ИмяФайлаКонфигурации);
	
КонецПроцедуры

СборщикБинарников = Новый СборщикБинарныхФайлов1С();
Лог = Логирование.ПолучитьЛог("oscript.lib.cfe2cf.test");